<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Streaming SVG Animation</title>
    <style>
        body {
            margin: 0;
            height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: #f0f2f5;
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
        }

        .card {
            background: white;
            padding: 40px;
            border-radius: 16px;
            box-shadow: 0 10px 25px rgba(0,0,0,0.05);
            display: flex;
            justify-content: center;
            align-items: center;
        }

        /* SVG 容器样式 */
        svg {
            width: 100%;
            max-width: 600px;
            height: auto;
            display: block;
        }

        /* --- 动画定义 --- */

        /* 1. 旋转加载环 (Spinner) */
        .spinner {
            /* 围绕自身中心旋转 */
            transform-origin: 40px 50px; 
            animation: spin 1s linear infinite;
        }

        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }

        /* 2. 加载点 (Dots) 的呼吸动画 */
        .loading-dot {
            animation: pulse 1.4s infinite ease-in-out both;
            fill: #333;
        }

        .loading-dot:nth-child(1) { animation-delay: -0.32s; }
        .loading-dot:nth-child(2) { animation-delay: -0.16s; }
        .loading-dot:nth-child(3) { animation-delay: 0s; }

        @keyframes pulse {
            0%, 80%, 100% { 
                opacity: 0.2; 
                transform: scale(0.8); 
            }
            40% { 
                opacity: 1; 
                transform: scale(1.1); 
            }
        }

        /* 3. 反光/扫光动画 (Shine) */
        .shine-layer {
            animation: shimmer 2.5s infinite;
        }

        @keyframes shimmer {
            0% { transform: translateX(-100%); }
            100% { transform: translateX(100%); }
        }
    </style>
</head>
<body>

    <div class="card">
        <svg viewBox="0 0 420 100" xmlns="http://www.w3.org/2000/svg">
            
            <defs>
                <!-- 文字形状 Mask：注意 X 坐标已调整为 80 -->
                <clipPath id="text-mask">
                    <text x="80" y="65" font-family="Arial, Helvetica, sans-serif" font-weight="bold" font-size="48">Streaming</text>
                </clipPath>

                <linearGradient id="shine-gradient" x1="0%" y1="0%" x2="100%" y2="0%">
                    <stop offset="0%" stop-color="white" stop-opacity="0" />
                    <stop offset="40%" stop-color="white" stop-opacity="0" />
                    <stop offset="50%" stop-color="white" stop-opacity="0.8" />
                    <stop offset="60%" stop-color="white" stop-opacity="0" />
                    <stop offset="100%" stop-color="white" stop-opacity="0" />
                </linearGradient>
            </defs>

            <!-- 背景 -->
            <rect width="100%" height="100%" fill="#ffffff" />

            <!-- 1. 左侧旋转加载环 -->
            <!-- 圆心在 (40, 50)，半径 14，描边宽度 4 -->
            <circle class="spinner" cx="40" cy="50" r="14" 
                    fill="none" stroke="#1a1a1a" stroke-width="4" 
                    stroke-linecap="round" 
                    stroke-dasharray="65" stroke-dashoffset="20" />

            <!-- 2. 基础文字层 (向右移到了 x=80) -->
            <text x="80" y="65" font-family="Arial, Helvetica, sans-serif" font-weight="bold" font-size="48" fill="#1a1a1a">Streaming</text>

            <!-- 3. 反光层 -->
            <g clip-path="url(#text-mask)">
                <rect class="shine-layer" x="0" y="0" width="420" height="100" fill="url(#shine-gradient)" />
            </g>

            <!-- 4. 右侧跳动点 (向右移到了 x=330) -->
            <g transform="translate(330, 65)">
                <circle class="loading-dot" cx="0" cy="-5" r="4" />
                <circle class="loading-dot" cx="15" cy="-5" r="4" />
                <circle class="loading-dot" cx="30" cy="-5" r="4" />
            </g>

        </svg>
    </div>

</body>
</html>